package org.com.java_chatroom.component;

import org.springframework.stereotype.Component;
import org.springframework.web.socket.WebSocketSession;

import java.net.http.WebSocket;
import java.util.concurrent.ConcurrentHashMap;

//这个类表示用户的在线状态:用户是否处于登录状态,以及处理用户多开问题
@Component
public class OnlineUserManager {
    private ConcurrentHashMap<Integer, WebSocketSession> map = new ConcurrentHashMap<>();

//    用户上线:将用户的信息存入到Map中
    public void online(int userId,WebSocketSession session){
        WebSocketSession session1 = map.get(userId);
//      禁止用户多开:
        if(session1!=null){
            System.out.println("[OnlineUserManager] 当前用户已经登录,禁止多开 userId:"+userId);
            return;
        }
        map.put(userId,session);
        System.out.println("[OnlineUserManager] 用户上线: userId:"+userId);
    }

//    用户下线:将用户信息从map中删除:
    public void offline(int userId,WebSocketSession session){
//        这里要注意防止因为用户多开,将正常登录的用户误下线:
        WebSocketSession session1 = map.get(userId);
        if(session == session1){
            map.remove(userId);
            System.out.println("[OnlineUserManager] 用户下线 userId:"+userId);
        }
    }

//    根据 userId 获取 WebSocketSession:
    public WebSocketSession getSession(int userId){
        return map.get(userId);
    }
 }
